% 检查SVM支持的验证脚本
% 验证MATLAB是否安装了Statistics and Machine Learning Toolbox

clear; clc;

fprintf('=== SVM功能支持检查 ===\n\n');

% 检查是否安装了Statistics and Machine Learning Toolbox
try
    % 尝试调用fitcecoc函数
    fprintf('检查 fitcecoc 函数...\t');
    help fitcecoc > NUL 2>&1;
    fprintf('✓ 可用\n');
    
    % 尝试调用templateSVM函数
    fprintf('检查 templateSVM 函数...\t');
    help templateSVM > NUL 2>&1;
    fprintf('✓ 可用\n');
    
    % 测试创建简单SVM模型
    fprintf('测试SVM模型创建...\t');
    
    % 生成测试数据
    rng(42); % 设置随机种子确保结果可重复
    X = randn(100, 5); % 100个样本，5个特征
    Y = randi([1, 3], 100, 1); % 3类标签
    
    % 创建SVM模型
    model = fitcecoc(X, Y, ...
        'Learners', templateSVM('KernelFunction', 'rbf', ...
                               'KernelScale', 'auto', ...
                               'BoxConstraint', 1));
    
    % 测试预测
    [pred, scores] = predict(model, X(1:5, :));
    
    fprintf('✓ 成功\n');
    fprintf('  - 训练样本: %d个\n', size(X, 1));
    fprintf('  - 特征维度: %d\n', size(X, 2));
    fprintf('  - 类别数: %d\n', length(unique(Y)));
    fprintf('  - 二元分类器数: %d\n', length(model.BinaryLearners));
    
    fprintf('\n✅ SVM功能完全支持！\n');
    fprintf('系统已准备好进行人脸识别的SVM分类。\n\n');
    
    % 显示建议的参数设置
    fprintf('=== 针对35人×8张图片的推荐设置 ===\n');
    fprintf('- 核函数: RBF (径向基函数)\n');
    fprintf('- 核尺度: auto (自动选择)\n');
    fprintf('- 正则化参数: 1.0\n');
    fprintf('- 预期二元分类器数: %d (一对一策略)\n', 35*(35-1)/2);
    
catch ME
    fprintf('❌ 失败\n');
    fprintf('\n错误信息: %s\n', ME.message);
    fprintf('错误ID: %s\n', ME.identifier);
    
    if contains(ME.message, 'Undefined function') || contains(ME.identifier, 'UndefinedFunction')
        fprintf('\n解决方案:\n');
        fprintf('1. 请安装 Statistics and Machine Learning Toolbox\n');
        fprintf('2. 或者仅使用欧式距离分类方法\n');
    else
        fprintf('\n请检查MATLAB版本和工具箱安装情况。\n');
    end
end

fprintf('\n=== 检查完成 ===\n'); 